<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   Apache Spark处理大数据入门，看这一篇就够了  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://dataunion.org/13853.html",
                  host: "http://dataunion.org",
                  prePath: "http://dataunion.org",
                  scheme: "http",
                  pathBase: "http://dataunion.org/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466457195: Accept with keywords: (title(0.4):Spark,社区,数据,入门,数盟, topn(0.466666666667):作业,Hadoop,文本文件,文件夹,内存,交互式,数据分析,架构,示例,Python,解决方案,数据库,hadoop,基础架构,开发者,计算,文章,数据处理,Spark,数据,变量,数盟,命令,磁盘,spark,框架,累加器,用例,集群,版本).-->
 </head>
 <body onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    Apache Spark处理大数据入门，看这一篇就够了
   </h1>
  </div>
  <div class="container" id="xmain">
   ﻿﻿
   <title>
    Apache Spark处理大数据入门，看这一篇就够了 | 数盟社区
   </title>
   <!-- All in One SEO Pack 2.2.7.6.2 by Michael Torbert of Semper Fi Web Design[32,74] -->
   <!-- /all in one seo pack -->
   <!--
<div align="center">
<a href="http://strata.oreilly.com.cn/hadoop-big-data-cn?cmp=mp-data-confreg-home-stcn16_dataunion_pc" target="_blank"><img src="http://dataunion.org/wp-content/uploads/2016/05/stratabj.jpg"/ ></a>
</div>
-->
   <header id="header-web">
    <div class="header-main">
     <hgroup class="logo">
      <h1>
       <a href="http://dataunion.org/" rel="home" title="数盟社区">
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/logo.png"/>
       </a>
      </h1>
     </hgroup>
     <!--logo-->
     <nav class="header-nav">
      <ul class="menu" id="menu-%e4%b8%bb%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-71" id="menu-item-71">
        <a href="http://dataunion.org/category/events" title="events">
         活动
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22457" id="menu-item-22457">
          <a href="http://dataunion.org/2016timeline">
           2016档期
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22459" id="menu-item-22459">
          <a href="http://dataunion.org/category/parterc">
           合作会议
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor menu-item-has-children menu-item-20869" id="menu-item-20869">
        <a href="http://dataunion.org/category/tech" title="articles">
         文章
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-20867" id="menu-item-20867">
          <a href="http://dataunion.org/category/tech/base" title="base">
           基础架构
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3302" id="menu-item-3302">
          <a href="http://dataunion.org/category/tech/ai" title="ai">
           人工智能
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3303" id="menu-item-3303">
          <a href="http://dataunion.org/category/tech/analysis" title="analysis">
           数据分析
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21920" id="menu-item-21920">
          <a href="http://dataunion.org/category/tech/dm">
           数据挖掘
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3314" id="menu-item-3314">
          <a href="http://dataunion.org/category/tech/viz" title="viz">
           可视化
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3305" id="menu-item-3305">
          <a href="http://dataunion.org/category/tech/devl" title="devl">
           编程语言
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-20876" id="menu-item-20876">
        <a href="http://dataunion.org/category/industry">
         行业
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16328" id="menu-item-16328">
          <a href="http://dataunion.org/category/industry/case" title="case">
           行业应用
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2112" id="menu-item-2112">
          <a href="http://dataunion.org/category/industry/demo" title="demo">
           Demo展示
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21562" id="menu-item-21562">
          <a href="http://dataunion.org/category/industry/news">
           行业资讯
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-311" id="menu-item-311">
        <a href="http://dataunion.org/category/sources" title="sources">
         资源
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20870" id="menu-item-20870">
        <a href="http://dataunion.org/category/books" title="book">
         图书
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21363" id="menu-item-21363">
        <a href="http://dataunion.org/category/training">
         课程
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-21853" id="menu-item-21853">
        <a href="http://dataunion.org/category/jobs">
         职位
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22050" id="menu-item-22050">
          <a href="http://dataunion.org/category/career">
           职业规划
          </a>
         </li>
        </ul>
       </li>
      </ul>
     </nav>
     <!--header-nav-->
    </div>
   </header>
   <!--header-web-->
   <div id="main">
    <div id="soutab">
     <form action="http://dataunion.org/" class="search" method="get">
     </form>
    </div>
    <div id="container">
     <nav id="mbx">
      当前位置：
      <a href="http://dataunion.org">
       首页
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech">
       文章
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech/base">
       基础架构
      </a>
      &gt;  正文
     </nav>
     <!--mbx-->
     <article class="content">
      <header align="centre" class="contenttitle">
       <div class="mscc">
        <h1 class="mscctitle">
         <a href="http://dataunion.org/13853.html">
          Apache Spark处理大数据入门，看这一篇就够了
         </a>
        </h1>
        <address class="msccaddress ">
         <em>
          8,603 次阅读 -
         </em>
         <a href="http://dataunion.org/category/tech/base" rel="category tag">
          基础架构
         </a>
        </address>
       </div>
      </header>
      <div class="content-text">
       <h2>
        <span style="font-size: 12pt;">
         作者
         <a class="editorlink f_taxonomyEditor" href="http://www.infoq.com/cn/author/Srini-Penchikala">
          Srini Penchikala
         </a>
         ，译者
         <strong>
          <a class="editorlink f_taxonomyTranslator" href="http://www.infoq.com/cn/author/%E4%B8%9B%E4%B8%80">
           丛一
          </a>
         </strong>
        </span>
       </h2>
       <h2>
        什么是Spark
       </h2>
       <p>
        <a href="https://spark.apache.org/">
         Apache Spark
        </a>
        是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发，并于2010年成为Apache的开源项目之一。
       </p>
       <p>
        与Hadoop和Storm等其他大数据和MapReduce技术相比，Spark有如下优势。
       </p>
       <p>
        首先，Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质（文本数据、图表数据等）的数据集和数据源（批量数据或实时的流数据）的大数据处理的需求。
       </p>
       <p>
        Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍，甚至能够将应用在磁盘上的运行速度提升10倍。
       </p>
       <p>
        Spark让开发者可以快速的用Java、Scala或Python编写程序。它本身自带了一个超过80个高阶操作符集合。而且还可以用它在shell中以交互式地查询数据。
       </p>
       <p>
        除了Map和Reduce操作之外，它还支持SQL查询，流数据，机器学习和图表数据处理。开发者可以在一个数据管道用例中单独使用某一能力或者将这些能力结合在一起使用。
       </p>
       <div id="lowerFullwidthVCR">
       </div>
       <p>
        在这个Apache Spark文章系列的第一部分中，我们将了解到什么是Spark，它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。
       </p>
       <h2>
        Hadoop和Spark
       </h2>
       <p>
        Hadoop这项大数据处理技术大概已有十年历史，而且被看做是首选的大数据集合处理的解决方案。MapReduce是一路计算的优秀解决方案，不过对于需要多路计算和算法的用例来说，并非十分高效。数据处理流程中的每一步都需要一个Map阶段和一个Reduce阶段，而且如果要利用这一解决方案，需要将所有用例都转换成MapReduce模式。
       </p>
       <p>
        在下一步开始之前，上一步的作业输出数据必须要存储到分布式文件系统中。因此，复制和磁盘存储会导致这种方式速度变慢。另外Hadoop解决方案中通常会包含难以安装和管理的集群。而且为了处理不同的大数据用例，还需要集成多种不同的工具（如用于机器学习的Mahout和流数据处理的Storm）。
       </p>
       <p>
        如果想要完成比较复杂的工作，就必须将一系列的MapReduce作业串联起来然后顺序执行这些作业。每一个作业都是高时延的，而且只有在前一个作业完成之后下一个作业才能开始启动。
       </p>
       <p>
        而Spark则允许程序开发者使用有向无环图（
        <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph">
         DAG
        </a>
        ）开发复杂的多步数据管道。而且还支持跨有向无环图的内存数据共享，以便不同的作业可以共同处理同一个数据。
       </p>
       <p>
        Spark运行在现有的Hadoop分布式文件系统基础之上（
        <a href="http://wiki.apache.org/hadoop/HDFS">
         HDFS
        </a>
        ）提供额外的增强功能。它支持
        <a href="http://databricks.com/blog/2014/01/21/Spark-and-Hadoop.html">
         将Spark应用部署到
        </a>
        现存的Hadoop v1集群（with SIMR – Spark-Inside-MapReduce）或Hadoop v2 YARN集群甚至是
        <a href="http://mesos.apache.org/">
         Apache Mesos
        </a>
        之中。
       </p>
       <p>
        我们应该将Spark看作是Hadoop MapReduce的一个替代品而不是Hadoop的替代品。其意图并非是替代Hadoop，而是为了提供一个管理不同的大数据用例和需求的全面且统一的解决方案。
       </p>
       <h2>
        Spark特性
       </h2>
       <p>
        Spark通过在数据处理过程中成本更低的洗牌（Shuffle）方式，将MapReduce提升到一个更高的层次。利用内存数据存储和接近实时的处理能力，Spark比其他的大数据处理技术的性能要快很多倍。
       </p>
       <p>
        Spark还支持大数据查询的延迟计算，这可以帮助优化大数据处理流程中的处理步骤。Spark还提供高级的API以提升开发者的生产力，除此之外还为大数据解决方案提供一致的体系架构模型。
       </p>
       <p>
        Spark将中间结果保存在内存中而不是将其写入磁盘，当需要多次处理同一数据集时，这一点特别实用。Spark的设计初衷就是既可以在内存中又可以在磁盘上工作的执行引擎。当内存中的数据不适用时，Spark操作符就会执行外部操作。Spark可以用于处理大于集群内存容量总和的数据集。
       </p>
       <p>
        Spark会尝试在内存中存储尽可能多的数据然后将其写入磁盘。它可以将某个数据集的一部分存入内存而剩余部分存入磁盘。开发者需要根据数据和用例评估对内存的需求。Spark的性能优势得益于这种内存中的数据存储。
       </p>
       <p>
        Spark的其他特性包括：
       </p>
       <ul>
        <li>
         支持比Map和Reduce更多的函数。
        </li>
        <li>
         优化任意操作算子图（operator graphs）。
        </li>
        <li>
         可以帮助优化整体数据处理流程的大数据查询的延迟计算。
        </li>
        <li>
         提供简明、一致的Scala，Java和Python API。
        </li>
        <li>
         提供交互式Scala和Python Shell。目前暂不支持Java。
        </li>
       </ul>
       <p>
        Spark是用
        <a href="http://www.scala-lang.org/">
         Scala程序设计语言
        </a>
        编写而成，运行于Java虚拟机（JVM）环境之上。目前支持如下程序设计语言编写Spark应用：
       </p>
       <ul>
        <li>
         Scala
        </li>
        <li>
         Java
        </li>
        <li>
         Python
        </li>
        <li>
         Clojure
        </li>
        <li>
         R
        </li>
       </ul>
       <h2>
        Spark生态系统
       </h2>
       <p>
        除了Spark核心API之外，Spark生态系统中还包括其他附加库，可以在大数据分析和机器学习领域提供更多的能力。
       </p>
       <p>
        这些库包括：
       </p>
       <ul>
        <li>
         <b>
          Spark Streaming:
         </b>
         <ul>
          <li>
           <a href="https://spark.apache.org/streaming/">
            Spark Streaming
           </a>
           基于微批量方式的计算和处理，可以用于处理实时的流数据。它使用DStream，简单来说就是一个弹性分布式数据集（RDD）系列，处理实时数据。
          </li>
         </ul>
        </li>
        <li>
         <b>
          Spark SQL:
         </b>
         <ul>
          <li>
           <a href="https://spark.apache.org/sql/">
            Spark SQL
           </a>
           可以通过JDBC API将Spark数据集暴露出去，而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据（如JSON，Parquet以及数据库等）执行ETL，将其转化，然后暴露给特定的查询。
          </li>
         </ul>
        </li>
        <li>
         <b>
          Spark MLlib:
         </b>
         <ul>
          <li>
           <a href="https://spark.apache.org/mllib/">
            MLlib
           </a>
           是一个可扩展的Spark机器学习库，由通用的学习算法和工具组成，包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。
          </li>
         </ul>
        </li>
        <li>
         <b>
          Spark GraphX:
         </b>
         <ul>
          <li>
           <a href="https://spark.apache.org/graphx/">
            GraphX
           </a>
           是用于图计算和并行图计算的新的（alpha）Spark API。通过引入弹性分布式属性图（Resilient Distributed Property Graph），一种顶点和边都带有属性的有向多重图，扩展了Spark RDD。为了支持图计算，GraphX暴露了一个基础操作符集合（如subgraph，joinVertices和aggregateMessages）和一个经过优化的Pregel API变体。此外，GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。
          </li>
         </ul>
        </li>
       </ul>
       <p>
        除了这些库以外，还有一些其他的库，如BlinkDB和Tachyon。
       </p>
       <p>
        <a href="http://blinkdb.org/">
         BlinkDB
        </a>
        是一个近似查询引擎，用于在海量数据上执行交互式SQL查询。BlinkDB可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执行查询并展示包含有意义的错误线注解的结果，操作大数据集合。
       </p>
       <p>
        <a href="http://tachyon-project.org/index.html">
         Tachyon
        </a>
        是一个以内存为中心的分布式文件系统，能够提供内存级别速度的跨集群框架（如Spark和MapReduce）的可信文件共享。它将工作集文件缓存在内存中，从而避免到磁盘中加载需要经常读取的数据集。通过这一机制，不同的作业/查询和框架可以以内存级的速度访问缓存的文件。
        <br/>
        此外，还有一些用于与其他产品集成的适配器，如Cassandra（
        <a href="http://www.datastax.com/dev/blog/accessing-cassandra-from-spark-in-java">
         Spark Cassandra 连接器
        </a>
        ）和R（SparkR）。Cassandra Connector可用于访问存储在Cassandra数据库中的数据并在这些数据上执行数据分析。
       </p>
       <p>
        下图展示了在Spark生态系统中，这些不同的库之间的相互关联。
       </p>
       <p>
        <img src="http://dataunion.org/wp-content/uploads/2015/04/0304081.png"/>
       </p>
       <p>
        <b>
         图1. Spark
        </b>
        <b>
         框架中的库
        </b>
       </p>
       <p>
        我们将在这一系列文章中逐步探索这些Spark库
       </p>
       <h2>
        Spark体系架构
       </h2>
       <p>
        Spark体系架构包括如下三个主要组件：
       </p>
       <ul>
        <li>
         数据存储
        </li>
        <li>
         API
        </li>
        <li>
         管理框架
        </li>
       </ul>
       <p>
        接下来让我们详细了解一下这些组件。
       </p>
       <p>
        <b>
         数据存储：
        </b>
       </p>
       <p>
        Spark用HDFS文件系统存储数据。它可用于存储任何兼容于Hadoop的数据源，包括HDFS，HBase，Cassandra等。
       </p>
       <p>
        <b>
         API
        </b>
        <b>
         ：
        </b>
       </p>
       <p>
        利用API，应用开发者可以用标准的API接口创建基于Spark的应用。Spark提供Scala，Java和Python三种程序设计语言的API。
       </p>
       <p>
        下面是三种语言Spark API的网站链接。
       </p>
       <ul>
        <li>
         <a href="http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package">
          <b>
           Scala API
          </b>
         </a>
        </li>
        <li>
         <a href="http://spark.apache.org/docs/latest/api/java/index.html">
          <b>
           Java
          </b>
         </a>
        </li>
        <li>
         <a href="http://spark.apache.org/docs/latest/api/python/index.html">
          <b>
           Python
          </b>
         </a>
        </li>
       </ul>
       <p>
        <b>
         资源管理：
        </b>
       </p>
       <p>
        Spark既可以部署在一个单独的服务器也可以部署在像Mesos或YARN这样的分布式计算框架之上。
       </p>
       <p>
        下图2展示了Spark体系架构模型中的各个组件。
       </p>
       <p>
        <img src="http://dataunion.org/wp-content/uploads/2015/04/0304082.png"/>
       </p>
       <p>
        <b>
         图2 Spark
        </b>
        <b>
         体系架构
        </b>
       </p>
       <h2>
        弹性分布式数据集
       </h2>
       <p>
        <a href="https://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds">
         弹性分布式数据集
        </a>
        （基于Matei的
        <a href="https://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf">
         研究论文
        </a>
        ）或RDD是Spark框架中的核心概念。可以将RDD视作数据库中的一张表。其中可以保存任何类型的数据。Spark将数据存储在不同分区上的RDD之中。
       </p>
       <p>
        RDD可以帮助重新安排计算并优化数据处理过程。
       </p>
       <p>
        此外，它还具有容错性，因为RDD知道如何重新创建和重新计算数据集。
       </p>
       <p>
        RDD是不可变的。你可以用变换（Transformation）修改RDD，但是这个变换所返回的是一个全新的RDD，而原有的RDD仍然保持不变。
       </p>
       <p>
        RDD支持两种类型的操作：
       </p>
       <ul>
        <li>
         变换（Transformation）
        </li>
        <li>
         行动（Action）
        </li>
       </ul>
       <p>
        <b>
         变换：
        </b>
        <a href="https://spark.apache.org/docs/latest/programming-guide.html#transformations">
         变换
        </a>
        的返回值是一个新的RDD集合，而不是单个值。调用一个变换方法，不会有任何求值计算，它只获取一个RDD作为参数，然后返回一个新的RDD。
       </p>
       <p>
        变换函数包括：map，filter，flatMap，groupByKey，reduceByKey，aggregateByKey，pipe和coalesce。
       </p>
       <p>
        <b>
         行动：
        </b>
        <a href="https://spark.apache.org/docs/latest/programming-guide.html#actions">
         行动
        </a>
        操作计算并返回一个新的值。当在一个RDD对象上调用行动函数时，会在这一时刻计算全部的数据处理查询并返回结果值。
       </p>
       <p>
        行动操作包括：reduce，collect，count，first，take，countByKey以及foreach。
       </p>
       <h2>
        如何安装Spark
       </h2>
       <p>
        安装和使用Spark有几种不同方式。你可以在自己的电脑上将Spark作为一个独立的框架安装或者从诸如
        <a href="http://www.cloudera.com/content/support/en/downloads/quickstart_vms/cdh-5-1-x.html">
         Cloudera
        </a>
        ，HortonWorks或MapR之类的供应商处获取一个Spark虚拟机镜像直接使用。或者你也可以使用在云端环境（如
        <a href="http://databricks.com/product">
         Databricks Cloud
        </a>
        ）安装并配置好的Spark。
       </p>
       <p>
        在本文中，我们将把Spark作为一个独立的框架安装并在本地启动它。最近Spark刚刚发布了1.2.0版本。我们将用这一版本完成示例应用的代码展示。
       </p>
       <h2>
        如何运行Spark
       </h2>
       <p>
        当你在本地机器安装了Spark或使用了基于云端的Spark后，有几种不同的方式可以连接到Spark引擎。
       </p>
       <p>
        下表展示了不同的Spark运行模式所需的Master URL参数。
       </p>
       <p>
        <img src="http://dataunion.org/wp-content/uploads/2015/04/0304083.png"/>
       </p>
       <h2>
        如何与Spark交互
       </h2>
       <p>
        Spark启动并运行后，可以用Spark shell连接到Spark引擎进行交互式数据分析。Spark shell支持Scala和Python两种语言。Java不支持交互式的Shell，因此这一功能暂未在Java语言中实现。
       </p>
       <p>
        可以用spark-shell.cmd和pyspark.cmd命令分别运行Scala版本和Python版本的Spark Shell。
       </p>
       <h2>
        Spark网页控制台
       </h2>
       <p>
        不论Spark运行在哪一种模式下，都可以通过访问Spark网页控制台查看Spark的作业结果和其他的统计数据，控制台的URL地址如下：
       </p>
       <p>
        http://localhost:4040
       </p>
       <p>
        Spark控制台如下图3所示，包括Stages，Storage，Environment和Executors四个标签页
       </p>
       <p>
        <b>
         （点击查看大图）
        </b>
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2015/04/0304084.png">
         <img src="http://dataunion.org/wp-content/uploads/2015/04/0304084.png"/>
        </a>
       </p>
       <p>
        <b>
         图3. Spark
        </b>
        <b>
         网页控制台
        </b>
       </p>
       <h3>
        共享变量
       </h3>
       <p>
        Spark提供两种类型的共享变量可以提升集群环境中的Spark程序运行效率。分别是广播变量和累加器。
       </p>
       <p>
        <b>
         广播变量：
        </b>
        广播变量可以在每台机器上缓存只读变量而不需要为各个任务发送该变量的拷贝。他们可以让大的输入数据集的集群拷贝中的节点更加高效。
       </p>
       <p>
        下面的代码片段展示了如何使用广播变量。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6bb102986602" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          //
// Broadcast Variables
//
val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar.value
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6bb102986602-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6bb102986602-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6bb102986602-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6bb102986602-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6bb102986602-5">
               5
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6bb102986602-1">
               <span class="crayon-c">
                //
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6bb102986602-2">
               <span class="crayon-c">
                // Broadcast Variables
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6bb102986602-3">
               <span class="crayon-c">
                //
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6bb102986602-4">
               <span class="crayon-e">
                val
               </span>
               <span class="crayon-v">
                broadcastVar
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                broadcast
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                Array
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-cn">
                1
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                2
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                3
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6bb102986602-5">
               <span class="crayon-v">
                broadcastVar
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                value
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0073 seconds] -->
       <p>
        <b>
         累加器：
        </b>
        只有在使用相关操作时才会添加累加器，因此它可以很好地支持并行。累加器可用于实现计数（就像在MapReduce中那样）或求和。可以用add方法将运行在集群上的任务添加到一个累加器变量中。不过这些任务无法读取变量的值。只有驱动程序才能够读取累加器的值。
       </p>
       <p>
        下面的代码片段展示了如何使用累加器共享变量：
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6cc617287341" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          //
// Accumulators
//

val accum = sc.accumulator(0, "My Accumulator")

sc.parallelize(Array(1, 2, 3, 4)).foreach(x =&amp;gt; accum += x)

accum.value
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6cc617287341-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6cc617287341-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6cc617287341-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6cc617287341-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6cc617287341-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6cc617287341-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6cc617287341-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6cc617287341-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6cc617287341-9">
               9
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6cc617287341-1">
               <span class="crayon-c">
                //
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6cc617287341-2">
               <span class="crayon-c">
                // Accumulators
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6cc617287341-3">
               <span class="crayon-c">
                //
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6cc617287341-4">
              </div>
              <div class="crayon-line" id="crayon-57685c688b6cc617287341-5">
               <span class="crayon-e">
                val
               </span>
               <span class="crayon-v">
                accum
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                accumulator
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-cn">
                0
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-s">
                "My Accumulator"
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6cc617287341-6">
              </div>
              <div class="crayon-line" id="crayon-57685c688b6cc617287341-7">
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                parallelize
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                Array
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-cn">
                1
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                2
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                3
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                4
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-st">
                foreach
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                x
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =&amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                accum
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                +=
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                x
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6cc617287341-8">
              </div>
              <div class="crayon-line" id="crayon-57685c688b6cc617287341-9">
               <span class="crayon-v">
                accum
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                value
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0023 seconds] -->
       <p>
       </p>
       <h2>
        Spark应用示例
       </h2>
       <p>
        本篇文章中所涉及的示例应用是一个简单的字数统计应用。这与学习用Hadoop进行大数据处理时的示例应用相同。我们将在一个文本文件上执行一些数据分析查询。本示例中的文本文件和数据集都很小，不过无须修改任何代码，示例中所用到的Spark查询同样可以用到大容量数据集之上。
       </p>
       <p>
        为了让讨论尽量简单，我们将使用Spark Scala Shell。
       </p>
       <p>
        首先让我们看一下如何在你自己的电脑上安装Spark。
       </p>
       <p>
        <b>
         前提条件：
        </b>
       </p>
       <ul>
        <li>
         为了让Spark能够在本机正常工作，你需要安装Java开发工具包（JDK）。这将包含在下面的第一步中。
        </li>
        <li>
         同样还需要在电脑上安装Spark软件。下面的第二步将介绍如何完成这项工作。
        </li>
       </ul>
       <p>
        <b>
         注：
        </b>
        下面这些指令都是以Windows环境为例。如果你使用不同的操作系统环境，需要相应的修改系统变量和目录路径已匹配你的环境。
       </p>
       <p>
        <b>
         I.
        </b>
        <b>
         安装JDK
        </b>
       </p>
       <p>
        1）从Oracle网站上下载JDK。推荐使用
        <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html">
         JDK 1.7版本
        </a>
        。
       </p>
       <p>
        将JDK安装到一个没有空格的目录下。对于Windows用户，需要将JDK安装到像c:\dev这样的文件夹下，而不能安装到“c:\Program Files”文件夹下。“c:\Program Files”文件夹的名字中包含空格，如果软件安装到这个文件夹下会导致一些问题。
       </p>
       <p>
        <b>
         注：
        </b>
        <b>
         不要
        </b>
        在“c:\Program Files”文件夹中安装JDK或（第二步中所描述的）Spark软件。
       </p>
       <p>
        2）完成JDK安装后，切换至JDK 1.7目录下的”bin“文件夹，然后键入如下命令，验证JDK是否正确安装：
       </p>
       <p>
        java -version
       </p>
       <p>
        如果JDK安装正确，上述命令将显示Java版本。
       </p>
       <p>
        <b>
         II.
        </b>
        <b>
         安装Spark
        </b>
        <b>
         软件：
        </b>
       </p>
       <p>
        从
        <a href="https://spark.apache.org/downloads.html">
         Spark网站
        </a>
        上下载最新版本的Spark。在本文发表时，最新的Spark版本是1.2。你可以根据Hadoop的版本选择一个特定的Spark版本安装。我下载了与Hadoop 2.4或更高版本匹配的Spark，文件名是spark-1.2.0-bin-hadoop2.4.tgz。
       </p>
       <p>
        将安装文件解压到本地文件夹中（如：c:\dev）。
       </p>
       <p>
        为了验证Spark安装的正确性，切换至Spark文件夹然后用如下命令启动Spark Shell。这是Windows环境下的命令。如果使用Linux或Mac OS，请相应地编辑命令以便能够在相应的平台上正确运行。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6d4648018667" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          c:
cd c:\dev\spark-1.2.0-bin-hadoop2.4
bin\spark-shell
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6d4648018667-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6d4648018667-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6d4648018667-3">
               3
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6d4648018667-1">
               <span class="crayon-v">
                c
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6d4648018667-2">
               <span class="crayon-i">
                cd
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                c
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                dev
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                spark
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-cn">
                1.2.0
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-v">
                bin
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-v">
                hadoop2
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-cn">
                4
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6d4648018667-3">
               <span class="crayon-v">
                bin
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                spark
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-v">
                shell
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0012 seconds] -->
       <p>
        如果Spark安装正确，就能够在控制台的输出中看到如下信息。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6db672067528" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          ….
15/01/17 23:17:46 INFO HttpServer: Starting HTTP Server
15/01/17 23:17:46 INFO Utils: Successfully started service 'HTTP class server' on port 58132.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.2.0
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Type :help for more information.
….
15/01/17 23:17:53 INFO BlockManagerMaster: Registered BlockManager
15/01/17 23:17:53 INFO SparkILoop: Created spark context..
Spark context available as sc.
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-6">
               6
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-7">
               7
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-8">
               8
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-9">
               9
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-10">
               10
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-11">
               11
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-12">
               12
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-13">
               13
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-14">
               14
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-15">
               15
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6db672067528-16">
               16
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6db672067528-17">
               17
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6db672067528-1">
               …
               <span class="crayon-sy">
                .
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-2">
               <span class="crayon-cn">
                15
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                01
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                23
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                46
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                INFO
               </span>
               <span class="crayon-v">
                HttpServer
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                Starting
               </span>
               <span class="crayon-e">
                HTTP
               </span>
               <span class="crayon-i">
                Server
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-3">
               <span class="crayon-cn">
                15
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                01
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                23
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                46
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                INFO
               </span>
               <span class="crayon-v">
                Utils
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                Successfully
               </span>
               <span class="crayon-e">
                started
               </span>
               <span class="crayon-i">
                service
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-s">
                'HTTP class server'
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                on
               </span>
               <span class="crayon-i">
                port
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                58132.
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-4">
               <span class="crayon-e">
                Welcome
               </span>
               <span class="crayon-st">
                to
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-5">
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                ____
               </span>
               <span class="crayon-v">
                __
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-6">
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                __
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-e">
                __
               </span>
               <span class="crayon-e">
                ___
               </span>
               <span class="crayon-v">
                _____
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-sy">
                _
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-7">
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-i">
                _
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-i">
                _
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                `
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                __
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               '
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-o">
                /
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-8">
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-v">
                ___
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                __
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-i">
                version
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                1.2.0
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-9">
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-o">
                /
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-10">
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-11">
               <span class="crayon-e">
                Using
               </span>
               <span class="crayon-e">
                Scala
               </span>
               <span class="crayon-i">
                version
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                2.10.4
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-e">
                Java
               </span>
               <span class="crayon-e">
                HotSpot
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                TM
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                64
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-e">
                Bit
               </span>
               <span class="crayon-e">
                Server
               </span>
               <span class="crayon-v">
                VM
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-i">
                Java
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                1.7.0_71
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-12">
               <span class="crayon-e">
                Type
               </span>
               <span class="crayon-st">
                in
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                expressions
               </span>
               <span class="crayon-st">
                to
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                have
               </span>
               <span class="crayon-e">
                them
               </span>
               <span class="crayon-v">
                evaluated
               </span>
               <span class="crayon-sy">
                .
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-13">
               <span class="crayon-v">
                Type
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-e">
                help
               </span>
               <span class="crayon-st">
                for
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                more
               </span>
               <span class="crayon-v">
                information
               </span>
               <span class="crayon-sy">
                .
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-14">
               …
               <span class="crayon-sy">
                .
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-15">
               <span class="crayon-cn">
                15
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                01
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                23
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                53
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                INFO
               </span>
               <span class="crayon-v">
                BlockManagerMaster
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                Registered
               </span>
               <span class="crayon-i">
                BlockManager
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6db672067528-16">
               <span class="crayon-cn">
                15
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                01
               </span>
               <span class="crayon-o">
                /
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                23
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                17
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-cn">
                53
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                INFO
               </span>
               <span class="crayon-v">
                SparkILoop
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-e">
                Created
               </span>
               <span class="crayon-e">
                spark
               </span>
               <span class="crayon-v">
                context
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-sy">
                .
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6db672067528-17">
               <span class="crayon-e">
                Spark
               </span>
               <span class="crayon-e">
                context
               </span>
               <span class="crayon-e">
                available
               </span>
               <span class="crayon-st">
                as
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0157 seconds] -->
       <p>
        可以键入如下命令检查Spark Shell是否工作正常。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6e1793837638" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          sc.version
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6e1793837638-1">
               1
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6e1793837638-1">
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                version
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0048 seconds] -->
       <p>
        （或）
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6e7181331637" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          sc.appName
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6e7181331637-1">
               1
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6e7181331637-1">
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                appName
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0006 seconds] -->
       <p>
        完成上述步骤之后，可以键入如下命令退出Spark Shell窗口：
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6ed104175792" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          :quit
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6ed104175792-1">
               1
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6ed104175792-1">
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-v">
                quit
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0005 seconds] -->
       <p>
        如果想启动Spark Python Shell，需要先在电脑上安装Python。你可以下载并安装
        <a href="http://continuum.io/downloads">
         Anaconda
        </a>
        ，这是一个免费的Python发行版本，其中包括了一些比较流行的科学、数学、工程和数据分析方面的Python包。
       </p>
       <p>
        然后可以运行如下命令启动Spark Python Shell：
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6f2436348308" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          c:
cd c:\dev\spark-1.2.0-bin-hadoop2.4
bin\pyspark
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6f2436348308-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6f2436348308-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6f2436348308-3">
               3
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6f2436348308-1">
               <span class="crayon-v">
                c
               </span>
               <span class="crayon-o">
                :
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6f2436348308-2">
               <span class="crayon-i">
                cd
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                c
               </span>
               <span class="crayon-o">
                :
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                dev
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                spark
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-cn">
                1.2.0
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-v">
                bin
               </span>
               <span class="crayon-o">
                -
               </span>
               <span class="crayon-v">
                hadoop2
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-cn">
                4
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6f2436348308-3">
               <span class="crayon-v">
                bin
               </span>
               <span class="crayon-sy">
                \
               </span>
               <span class="crayon-v">
                pyspark
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0012 seconds] -->
       <p>
       </p>
       <h2>
        Spark示例应用
       </h2>
       <p>
        完成Spark安装并启动后，就可以用Spark API执行数据分析查询了。
       </p>
       <p>
        这些从文本文件中读取并处理数据的命令都很简单。我们将在这一系列文章的后续文章中向大家介绍更高级的Spark框架使用的用例。
       </p>
       <p>
        首先让我们用Spark API运行流行的Word Count示例。如果还没有运行Spark Scala Shell，首先打开一个Scala Shell窗口。这个示例的相关命令如下所示：
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6f8332887923" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
 
val txtFile = "README.md"
val txtData = sc.textFile(txtFile)
txtData.cache()
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6f8332887923-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6f8332887923-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6f8332887923-3">
               3
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6f8332887923-4">
               4
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b6f8332887923-5">
               5
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b6f8332887923-6">
               6
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6f8332887923-1">
               <span class="crayon-e">
                import
               </span>
               <span class="crayon-v">
                org
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                apache
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                spark
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                SparkContext
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6f8332887923-2">
               <span class="crayon-e">
                import
               </span>
               <span class="crayon-v">
                org
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                apache
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                spark
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-v">
                SparkContext
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-i">
                _
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6f8332887923-3">
               <span class="crayon-h">
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6f8332887923-4">
               <span class="crayon-e">
                val
               </span>
               <span class="crayon-v">
                txtFile
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-s">
                "README.md"
               </span>
              </div>
              <div class="crayon-line" id="crayon-57685c688b6f8332887923-5">
               <span class="crayon-e">
                val
               </span>
               <span class="crayon-v">
                txtData
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                sc
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                textFile
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                txtFile
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b6f8332887923-6">
               <span class="crayon-v">
                txtData
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                cache
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0093 seconds] -->
       <p>
        我们可以调用cache函数将上一步生成的RDD对象保存到缓存中，在此之后Spark就不需要在每次数据查询时都重新计算。需要注意的是，cache()是一个延迟操作。在我们调用cache时，Spark并不会马上将数据存储到内存中。只有当在某个RDD上调用一个行动时，才会真正执行这个操作。
       </p>
       <p>
        现在，我们可以调用count函数，看一下在文本文件中有多少行数据。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b6ff182991095" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          txtData.count()
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b6ff182991095-1">
               1
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b6ff182991095-1">
               <span class="crayon-v">
                txtData
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                count
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0006 seconds] -->
       <p>
        然后，我们可以执行如下命令进行字数统计。在文本文件中统计数据会显示在每个单词的后面。
       </p>
       <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
       <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-57685c688b704499277621" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
        <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
         <span class="crayon-title">
         </span>
         <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-wrap-button" title="切换自动换行">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-expand-button" title="点击展开代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-copy-button" title="复制代码">
           <div class="crayon-button-icon">
           </div>
          </div>
          <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
           <div class="crayon-button-icon">
           </div>
          </div>
         </div>
        </div>
        <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
        </div>
        <div class="crayon-plain-wrap">
         <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
          val wcData = txtData.flatMap(l =&amp;gt; l.split(" ")).map(word =&amp;gt; (word, 1)).reduceByKey(_ + _)

wcData.collect().foreach(println)
         </textarea>
        </div>
        <div class="crayon-main" style="">
         <table class="crayon-table">
          <tbody>
           <tr class="crayon-row">
            <td class="crayon-nums " data-settings="show">
             <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
              <div class="crayon-num" data-line="crayon-57685c688b704499277621-1">
               1
              </div>
              <div class="crayon-num crayon-striped-num" data-line="crayon-57685c688b704499277621-2">
               2
              </div>
              <div class="crayon-num" data-line="crayon-57685c688b704499277621-3">
               3
              </div>
             </div>
            </td>
            <td class="crayon-code">
             <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
              <div class="crayon-line" id="crayon-57685c688b704499277621-1">
               <span class="crayon-e">
                val
               </span>
               <span class="crayon-v">
                wcData
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                txtData
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                flatMap
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                l
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =&amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                l
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                split
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-s">
                " "
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                map
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                word
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                =&amp;
               </span>
               <span class="crayon-v">
                gt
               </span>
               <span class="crayon-sy">
                ;
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-t">
                word
               </span>
               <span class="crayon-sy">
                ,
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-cn">
                1
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                reduceByKey
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-o">
                +
               </span>
               <span class="crayon-h">
               </span>
               <span class="crayon-v">
                _
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
              <div class="crayon-line crayon-striped-line" id="crayon-57685c688b704499277621-2">
              </div>
              <div class="crayon-line" id="crayon-57685c688b704499277621-3">
               <span class="crayon-v">
                wcData
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-e">
                collect
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-sy">
                )
               </span>
               <span class="crayon-sy">
                .
               </span>
               <span class="crayon-st">
                foreach
               </span>
               <span class="crayon-sy">
                (
               </span>
               <span class="crayon-v">
                println
               </span>
               <span class="crayon-sy">
                )
               </span>
              </div>
             </div>
            </td>
           </tr>
          </tbody>
         </table>
        </div>
       </div>
       <!-- [Format Time: 0.0087 seconds] -->
       <p>
        如果想查看更多关于如何使用Spark核心API的代码示例，请参考网站上的
        <a href="http://spark.apache.org/docs/latest/programming-guide.html">
         Spark文档
        </a>
        。
       </p>
       <h2>
        后续计划
       </h2>
       <p>
        在后续的系列文章中，我们将从Spark SQL开始，学习更多关于Spark生态系统的其他部分。之后，我们将继续了解Spark Streaming，Spark MLlib和Spark GraphX。我们也会有机会学习像Tachyon和BlinkDB等框架。
       </p>
       <h2>
        小结
       </h2>
       <p>
        在本文中，我们了解了Apache Spark框架如何通过其标准API帮助完成大数据处理和分析工作。我们还对Spark和传统的MapReduce实现（如Apache Hadoop）进行了比较。Spark与Hadoop基于相同的HDFS文件存储系统，因此如果你已经在Hadoop上进行了大量投资和基础设施建设，可以一起使用Spark和MapReduce。
       </p>
       <p>
        此外，也可以将Spark处理与Spark SQL、机器学习以及Spark Streaming结合在一起。关于这方面的内容我们将在后续的文章中介绍。
       </p>
       <p>
        利用Spark的一些集成功能和适配器，我们可以将其他技术与Spark结合在一起。其中一个案例就是将Spark、Kafka和Apache Cassandra结合在一起，其中Kafka负责输入的流式数据，Spark完成计算，最后Cassandra NoSQL数据库用于保存计算结果数据。
       </p>
       <p>
        不过需要牢记的是，Spark生态系统仍不成熟，在安全和与BI工具集成等领域仍然需要进一步的改进。
       </p>
       <h2>
        参考文献
       </h2>
       <ul>
        <li>
         <a href="http://spark.apache.org/">
          Spark主站
         </a>
        </li>
        <li>
         <a href="http://spark.apache.org/examples.html">
          Spark示例
         </a>
        </li>
        <li>
         <a href="http://spark.apache.org/examples.html">
          2014年Spark峰会
         </a>
         <a href="http://spark-summit.org/2014/">
          演示文稿和视频
         </a>
        </li>
        <li>
         <a href="http://databricks.com/spark">
          Spark on Databricks website
         </a>
        </li>
        <li>
         <a href="http://databricks.com/spark">
          Databricks网站上的Spark栏目
         </a>
        </li>
       </ul>
       <h2>
        关于作者
       </h2>
       <p>
        <img src="http://dataunion.org/wp-content/uploads/2015/04/0304085.jpg"/>
        <b>
         Srini Penchikala
        </b>
        目前是一家金融服务机构的软件架构师，这个机构位于德克萨斯州的奥斯汀。他在软件系统架构、设计和开发方面有超过20年的经验。Srini目前正在撰写一本关于NoSQL数据库模式的书。他还是曼宁出版社出版的《Spring Roo in Action》一书的合著者（http://www.manning.com/SpringRooinAction）。他还曾经出席各种会议，如JavaOne，SEI Architecture Technology Conference（SATURN），IT Architect Conference（ITARC），No Fluff Just Stuff，NoSQL Now和Project World Conference等。Srini还在InfoQ，The ServerSide，OReilly Network（ONJava），DevX Java，java.net以及JavaWorld等网站上发表过很多关于软件系统架构、安全和风险管理以及NoSQL数据库等方面的文章。他还是
        <a href="http://www.infoq.com/author/Srini-Penchikala">
         InfoQ NoSQL数据库社区的责任编辑
        </a>
        。
       </p>
       <div>
       </div>
       <p>
        <strong>
         查看英文原文：
        </strong>
        <a href="http://www.infoq.com/articles/apache-spark-introduction">
         Big Data Processing with Apache Spark – Part 1: Introduction
        </a>
       </p>
       <p>
       </p>
       <p>
        文章出处：http://www.infoq.com/cn/articles/apache-spark-introduction
       </p>
      </div>
      <div>
       <strong>
        注：转载文章均来自于公开网络，仅供学习使用，不会用于任何商业用途，如果侵犯到原作者的权益，请您与我们联系删除或者授权事宜，联系邮箱：contact@dataunion.org。转载数盟网站文章请注明原文章作者，否则产生的任何版权纠纷与数盟无关。
       </strong>
      </div>
      <!--content_text-->
      <div class="fenxian">
       <!-- JiaThis Button BEGIN -->
       <div class="jiathis_style_32x32">
        <p class="jiathis_button_weixin">
        </p>
        <p class="jiathis_button_tsina">
        </p>
        <p class="jiathis_button_qzone">
        </p>
        <p class="jiathis_button_cqq">
        </p>
        <p class="jiathis_button_tumblr">
        </p>
        <a class="jiathis jiathis_txt jtico jtico_jiathis" href="http://www.jiathis.com/share" target="_blank">
        </a>
        <p class="jiathis_counter_style">
        </p>
       </div>
       <!-- JiaThis Button END -->
      </div>
     </article>
     <!--content-->
     <!--相关文章-->
     <div class="xianguan">
      <div class="xianguantitle">
       相关文章！
      </div>
      <ul class="pic">
       <li>
        <a href="http://dataunion.org/20751.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/09/t0143d1824aeb41cc0a-300x169.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20751.html" rel="bookmark" title="Spark 1.5.0发布：新增机器学习算法工具，扩展Spark R API">
         Spark 1.5.0发布：新增机器学习算法工具，扩展Spark R API
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20368.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/08/QQ截图20150412200335-300x192.png"/>
        </a>
        <a class="link" href="http://dataunion.org/20368.html" rel="bookmark" title="Spark大数据分析框架的核心部件全解析">
         Spark大数据分析框架的核心部件全解析
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20101.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/07/t01673770f1417f655a_副本.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20101.html" rel="bookmark" title="在Apache Spark上跑Logistic Regression算法">
         在Apache Spark上跑Logistic Regression算法
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/20055.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/07/QQ截图20150720211801_副本.png"/>
        </a>
        <a class="link" href="http://dataunion.org/20055.html" rel="bookmark" title="Spark与Flink：对比与分析">
         Spark与Flink：对比与分析
        </a>
       </li>
      </ul>
     </div>
     <!--相关文章-->
     <div class="comment" id="comments">
      <!-- You can start editing here. -->
      <!-- If comments are open, but there are no comments. -->
      <div class="title">
       期待你一针见血的评论，Come on！
      </div>
      <div id="respond">
       <p>
        不用想啦，马上
        <a href="http://dataunion.org/wp-login.php?redirect_to=http%3A%2F%2Fdataunion.org%2F13853.html">
         "登录"
        </a>
        发表自已的想法.
       </p>
      </div>
     </div>
     <!-- .nav-single -->
    </div>
    <!--Container End-->
    <aside id="sitebar">
     <div class="sitebar_list2">
      <div class="wptag">
       <span class="tagtitle">
        热门标签+
       </span>
       <div class="tagg">
        <ul class="menu" id="menu-%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1605" id="menu-item-1605">
          <a href="http://taidizh.com/">
           泰迪智慧
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20884" id="menu-item-20884">
          <a href="http://www.transwarp.cn/">
           星环科技
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3538" id="menu-item-3538">
          <a href="http://datall.org/">
           珈和遥感
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20888" id="menu-item-20888">
          <a href="http://www.chinahadoop.cn/">
           小象学院
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <div class="textwidget">
       <div align="center">
        <a href="http://study.163.com/course/courseMain.htm?courseId=991022" target="_blank">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/dv.jpg"/>
        </a>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       文章分类
      </h4>
      <div class="tagcloud">
       <a class="tag-link-44" href="http://dataunion.org/category/industry/demo" style="font-size: 10.204724409449pt;" title="4个话题">
        Demo展示
       </a>
       <a class="tag-link-31" href="http://dataunion.org/category/experts" style="font-size: 15.826771653543pt;" title="52个话题">
        专家团队
       </a>
       <a class="tag-link-870" href="http://dataunion.org/category/tech/ai" style="font-size: 19.795275590551pt;" title="273个话题">
        人工智能
       </a>
       <a class="tag-link-488" href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f" style="font-size: 8pt;" title="1个话题">
        加入数盟
       </a>
       <a class="tag-link-869" href="http://dataunion.org/category/tech/viz" style="font-size: 17.204724409449pt;" title="93个话题">
        可视化
       </a>
       <a class="tag-link-30" href="http://dataunion.org/category/partners" style="font-size: 10.645669291339pt;" title="5个话题">
        合作伙伴
       </a>
       <a class="tag-link-889" href="http://dataunion.org/category/parterc" style="font-size: 11.582677165354pt;" title="8个话题">
        合作会议
       </a>
       <a class="tag-link-104" href="http://dataunion.org/category/books" style="font-size: 12.96062992126pt;" title="15个话题">
        图书
       </a>
       <a class="tag-link-220" href="http://dataunion.org/category/tech/base" style="font-size: 19.850393700787pt;" title="281个话题">
        基础架构
       </a>
       <a class="tag-link-219" href="http://dataunion.org/category/tech/analysis" style="font-size: 19.409448818898pt;" title="232个话题">
        数据分析
       </a>
       <a class="tag-link-887" href="http://dataunion.org/category/tech/dm" style="font-size: 13.291338582677pt;" title="17个话题">
        数据挖掘
       </a>
       <a class="tag-link-34" href="http://dataunion.org/category/tech" style="font-size: 20.732283464567pt;" title="404个话题">
        文章
       </a>
       <a class="tag-link-1" href="http://dataunion.org/category/uncategorized" style="font-size: 22pt;" title="693个话题">
        未分类
       </a>
       <a class="tag-link-4" href="http://dataunion.org/category/events" style="font-size: 14.503937007874pt;" title="29个话题">
        活动
       </a>
       <a class="tag-link-890" href="http://dataunion.org/category/tech/%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" style="font-size: 10.204724409449pt;" title="4个话题">
        深度学习
       </a>
       <a class="tag-link-221" href="http://dataunion.org/category/tech/devl" style="font-size: 18.968503937008pt;" title="193个话题">
        编程语言
       </a>
       <a class="tag-link-888" href="http://dataunion.org/category/career" style="font-size: 15.661417322835pt;" title="48个话题">
        职业规划
       </a>
       <a class="tag-link-5" href="http://dataunion.org/category/jobs" style="font-size: 14.11811023622pt;" title="25个话题">
        职位
       </a>
       <a class="tag-link-871" href="http://dataunion.org/category/industry" style="font-size: 15.716535433071pt;" title="49个话题">
        行业
       </a>
       <a class="tag-link-613" href="http://dataunion.org/category/industry/case" style="font-size: 16.984251968504pt;" title="84个话题">
        行业应用
       </a>
       <a class="tag-link-885" href="http://dataunion.org/category/industry/news" style="font-size: 17.425196850394pt;" title="102个话题">
        行业资讯
       </a>
       <a class="tag-link-10" href="http://dataunion.org/category/training" style="font-size: 14.228346456693pt;" title="26个话题">
        课程
       </a>
       <a class="tag-link-16" href="http://dataunion.org/category/sources" style="font-size: 15.661417322835pt;" title="48个话题">
        资源
       </a>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       功能
      </h4>
      <ul>
       <li>
        <a href="http://dataunion.org/wp-login.php?action=register">
         注册
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/wp-login.php">
         登录
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/feed">
         文章
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/comments/feed">
         评论
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">
         WordPress.org
        </a>
       </li>
      </ul>
     </div>
    </aside>
    <div class="clear">
    </div>
   </div>
   <!--main-->
   ﻿
   <footer id="dibu">
    <div class="about">
     <div class="right">
      <ul class="menu" id="menu-%e5%ba%95%e9%83%a8%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-18024" id="menu-item-18024">
        <a href="http://dataunion.org/category/partners">
         合作伙伴
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20881" id="menu-item-20881">
        <a href="http://dataunion.org/contribute">
         文章投稿
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20872" id="menu-item-20872">
        <a href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f">
         加入数盟
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22441" id="menu-item-22441">
        <a href="http://dataunion.org/f-links">
         友情链接
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20874" id="menu-item-20874">
        <a href="http://dataunion.org/aboutus">
         关于数盟
        </a>
       </li>
      </ul>
      <p class="banquan">
       数盟社区        ，
        做最棒的数据科学社区
      </p>
     </div>
     <div class="left">
      <ul class="bottomlist">
       <li>
        <a href="http://weibo.com/DataScientistUnion  " target="_blank" 　title="">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weibo.png"/>
        </a>
       </li>
       <li>
        <a class="cd-popup-trigger" href="http://dataunion.org/13853.html#0">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weixin.png"/>
        </a>
       </li>
      </ul>
      <div class="cd-popup">
       <div class="cd-popup-container">
        <h1>
         扫描二维码,加微信公众号
        </h1>
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/2014-12-06-1515289049.png"/>
        <a class="cd-popup-close" href="http://dataunion.org/13853.html">
        </a>
       </div>
       <!-- cd-popup-container -->
      </div>
      <!-- cd-popup -->
     </div>
    </div>
    <!--about-->
    <div class="bottom">
     <a href="http://dataunion.org/">
      数盟社区
     </a>
     <a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank">
      京ICP备14026740号
     </a>
     联系我们：
     <a href="mailto:contact@dataunion.org" target="_blank">
      contact@dataunion.org
     </a>
     <div class="tongji">
     </div>
     <!--bottom-->
     <div class="scroll" id="scroll" style="display:none;">
      ︿
     </div>
    </div>
   </footer>
   <!--dibu-->
  </div>
 </body>
</html>